// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;

namespace Microsoft.AspNetCore.Http
{
	/// <summary>
	/// Extension methods for <see cref="HttpResponse"/>.
	/// </summary>
	internal static class ResponseExtensions
	{
		///// <summary>
		///// Clears the HTTP response.
		///// <para>
		///// This invocation resets the response headers, response status code, and response body.
		///// </para>
		///// </summary>
		///// <param name="response">The <see cref="HttpResponse"/> to clear.</param>
		//internal static void Clear(this HttpResponse response)
		//{
		//	if (response.HasStarted)
		//	{
		//		throw new InvalidOperationException("The response cannot be cleared, it has already started sending.");
		//	}
		//	response.StatusCode = 200;
		//	IHttpResponseFeature feature = response.HttpContext.Features.Get<IHttpResponseFeature>();
		//	if (feature != null) { feature.ReasonPhrase = null; }
		//	response.Headers.Clear();
		//	if (response.Body.CanSeek)
		//	{
		//		response.Body.SetLength(0);
		//	}
		//}

		///// <summary>
		///// Returns a redirect response (HTTP 301, HTTP 302, HTTP 307 or HTTP 308) to the client.
		///// </summary>
		///// <param name="response">The <see cref="HttpResponse"/> to redirect.</param>
		///// <param name="location">The URL to redirect the client to. This must be properly encoded for use in http headers where only ASCII characters are allowed.</param>
		///// <param name="permanent"><c>True</c> if the redirect is permanent (301 or 308), otherwise <c>false</c> (302 or 307).</param>
		///// <param name="preserveMethod"><c>True</c> if the redirect needs to reuse the method and body (308 or 307), otherwise <c>false</c> (301 or 302).</param>
		//internal static void Redirect(this HttpResponse response, string location, bool permanent, bool preserveMethod)
		//{
		//	if (preserveMethod)
		//	{
		//		response.StatusCode = permanent ? StatusCodes.Status308PermanentRedirect : StatusCodes.Status307TemporaryRedirect;
		//	}
		//	else
		//	{
		//		response.StatusCode = permanent ? StatusCodes.Status301MovedPermanently : StatusCodes.Status302Found;
		//	}

		//	response.Headers.Location = location;
		//}
	}
}
